/***************************************************************************
 * Copyright (C) 2010
 * by Dimok
 *
 * This software is provided 'as-is', without any express or implied
 * warranty. In no event will the authors be held liable for any
 * damages arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any
 * purpose, including commercial applications, and to alter it and
 * redistribute it freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you
 * must not claim that you wrote the original software. If you use
 * this software in a product, an acknowledgment in the product
 * documentation would be appreciated but is not required.
 *
 * 2. Altered source versions must be plainly marked as such, and
 * must not be misrepresented as being the original software.
 *
 * 3. This notice may not be removed or altered from any source
 * distribution.
 *
 * for WiiXplorer 2010
 ***************************************************************************/
#ifndef _GXCONSOLE_HPP_
#define _GXCONSOLE_HPP_

#include "GUI/gui_element.h"
#include "GUI/gui_image.h"
#include "Controls/CMutex.h"
#include "TextOperations/wstring.hpp"

class GXConsole : public GuiElement
{
	public:
		//!Constructor
		GXConsole(int w, int h);
		//!Destructor
		virtual ~GXConsole();
		//!formated print
		void printf(const char *format, ...) __attribute__((format(printf,2,3)));
		//!clear console
		void clear();
		//!Set background image
		void SetImage(GuiImage * img);
		//!Set text color
		void SetTextColor(GXColor c);
		//!Set fontsize
		void SetFontSize(int size);
		//!Set the height between two lines
		void SetHeightBetweenLines(int h);
		//!Draw callback(GuiElement overload)
		void Draw();
	protected:
		void AddText(const wchar_t * text);
		void AddRow(const wString * text);
		void RemoveRow(int row);
		bool IsMaxWidth(const wString * text);

		CMutex mutex;
		u32 fontSize;
		u32 HeightBetweenLines;
		u32 RowCount;
		u16 style;
		GXColor color;
		GuiImage * Background;
		std::vector<wString *> ConsoleRow;
};

#endif
